home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 June
/
EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso
/
earcd
/
utmisc2
/
countlns.lha
/
CountLines
/
CountLines.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-03-29
|
5KB
|
240 lines
/*
** $VER: CountLines 1.0 (29 Mar 1996) **
**
** © 1996 Timo C. Nentwig
** all rights reserved !
**
** tcn@techbase.in-berlin.de
**
** ======================================
**
** Language:
** ¯¯¯¯¯¯¯¯
**
** Program is compiled by SAS/C
**
**
** Purpose:
** ¯¯¯¯¯¯¯
**
** Returns the number of lines in
** specified file.
**
** Scans the given file(s) and returns number of
** · lines
** · blank lines of lines
** · bytes of file
**
** Pattern matching is supported.
** All arguments are worked up.
**
**
** Requirements:
** ¯¯¯¯¯¯¯¯¯¯¯¯
**
** · AOS 2+
**
**
** Solve:
** ¯¯¯¯¯
**
**
**
** Bugs:
** ¯¯¯¯
**
**
**
** ToDo:
** ¯¯¯¯
**
**
** Notes:
** ¯¯¯¯¯
**
**
**
** ======================================
**
** History:
** ¯¯¯¯¯¯¯
**
** 29 Mar 1996 - 1.0 : initial release
**
*/
/// include
#include <exec/types.h>
#include <exec/memory.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <strings.h>
#include <stdio.h>
///
/// protos
BOOL ScanFile (STRPTR path, LONG *lines, LONG *blanks, LONG *bytes);
///
/// main
VOID
main (UWORD argc, STRPTR argv[])
{
if (argc == 1 || *argv[1] == '?')
{
printf ("USAGE : %s <path/file> or <path/pattern>\n", argv[0]);
printf ("EXAMPLES:\n");
printf ("\t %s docs:#?.doc lists:stats/#?.lst <...>\n", argv[0]);
printf ("\t %s text:ascii_file docs:*.doc <...>\n", argv[0]);
printf ("\t %s text:ascii_file <...>\n", argv[0]);
}
else
{
#define BUFFSIZE 240
if (NULL != (DOSBase = (struct DosLibrary *) OpenLibrary ("dos.library", 37)))
{
struct AnchorPath *ap;
LONG err;
if (ap = AllocVec (sizeof (struct AnchorPath) + BUFFSIZE, MEMF_CLEAR))
{
UWORD cnt;
LONG number = 1;
LONG g_lines = 0;
LONG g_blanks = 0;
LONG g_bytes = 0;
printf ("
Couting ...
\n\n");
printf (" cnt | lines | blanks | bytes\n");
printf (" -----+----------+----------+-----------\n");
for (cnt = 1; cnt < argc; cnt++)
{
ap -> ap_Strlen = BUFFSIZE;
for (err = MatchFirst (argv[cnt], ap); err == 0; err = MatchNext (ap), number++)
{
LONG l_lines = 0;
LONG l_blanks = 0;
LONG l_bytes = 0;
if (ScanFile (ap -> ap_Buf, &l_lines, &l_blanks, &l_bytes) == TRUE)
{
g_lines += l_lines;
g_blanks += l_blanks;
g_bytes += l_bytes;
printf ("
%25s:
", FilePart (ap -> ap_Buf));
printf (" %4ld |
%6ld
|
%6ld
|
%8ld
\n", number, l_lines, l_blanks, l_bytes);
}
else
{
printf ("Couldn't access file \"%s\"\n", ap -> ap_Buf);
}
CloseLibrary ((struct Library *) DOSBase);
}
}
if (number > 2)
{
printf ("==================================+==========+==========+==========\n");
printf ("
Complete Statistic:
%6ld
|
%6ld
|
%8ld
\n", g_lines, g_blanks, g_bytes);
}
MatchEnd (ap);
FreeVec (ap);
}
}
}
}
///
/// ScanFile
BOOL
ScanFile (STRPTR path, LONG *lines, LONG *blanks, LONG *bytes)
{
BPTR file;
REGISTER LONG i;
REGISTER UBYTE line[1000];
REGISTER LONG c;
if ((file = Open (path, MODE_OLDFILE)) != NULL)
{
for (i = 0; (c = FGetC (file)) != EOF; i++)
{
*bytes += 1;
if (c == '\n')
{
line[i] = '\0';
i = -1;
*lines += 1;
if (strlen (line) < 1)
*blanks += 1;
}
else
{
if (i >= 999)
i = -1;
line[i] = c;
}
}
Close (file);
return (TRUE);
}
else
{
return (FALSE);
}
}
///